#ifndef CANDIDATOABM_H_
#define CANDIDATOABM_H_
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <algorithm>
#include <fstream>
#include <limits>
#include "../Manejadores/ManejadorCandidato.h"
#include "../Manejadores/ManejadorVotante.h"
#include "../Manejadores/ManejadorEleccion.h"
#include "../Manejadores/ManejadorCargo.h"
#include "../Manejadores/ManejadorLista.h"
#include "../Interfaces/IAbm.h"
#include "../Entidades/Utils.h"
#include "../Accesorios/Parser.h"
#include "../Archivos/ArchivoAltasMasivas.h"

using namespace Archivos;
using namespace Manejadores;
using namespace Entidades;
using namespace Accesorios;

using namespace std;

namespace ABM{

class CandidatoABM :public IAbm {

private:

	ManejadorCargo* manejadorCargo;
	ManejadorCandidato* manejadorCandidato;
	ManejadorVotante* manejadorVotante;
	ManejadorEleccion* manejadorEleccion;
	ManejadorLista* manejadorLista;

	bool existenLosIdentificadoresExternos(int fecha, string cargoPpal, string lista, string votante, string cargo);

public:
	CandidatoABM();
	int menu(); // definida por el padre
	void ABM(int opcion); // definida por el padre
	//hay q implementarlas para que deje de ser abstracta
	bool alta();
	bool baja();
	bool modificacion();
	void altaMasiva();
	bool listar();

	virtual ~CandidatoABM();
};
}

#endif /* CANDIDATOABM_H_ */
